# 151.反转字符串中的单词
# 给你一个字符串s ，请你反转字符串中单词的顺序。
# 单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。
# 返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。
#
# 注意：输入字符串
# s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中，单词间应当仅用单个空格分隔，且不包含任何额外的空格。
#
# 示例1：
# 输入：s = "the sky is blue"
# 输出："blue is sky the"
#
# 示例2：
# 输入：s = "  hello world  "
# 输出："world hello"
# 解释：反转后的字符串中不能存在前导空格和尾随空格。
#
# 示例3：
# 输入：s = "a good   example"
# 输出："example good a"
# 解释：如果两个单词间有多余的空格，反转后的字符串需要将单词间的空格减少到仅有一个。


class Solution:
    def reverseWords(self, s: str) -> str:
        # 1.去除多余空格
        s = s.strip()#[::-1].strip()[::-1]
        list_s = list(s)
        left = 0
        while left < len(list_s):
            if list_s[left] == " " and list_s[left+1] == " ":
                list_s.pop(left+1)
                continue
            left += 1
        # 2.反转字符串
        left, right = 0, len(list_s)-1
        while left < right:
            list_s[left], list_s[right] = list_s[right], list_s[left]
            left += 1
            right -= 1
        # 3.反转单词
        list_s.append(" ")
        left, right = 0, len(list_s) - 1
        index = 0
        while index < len(list_s):
            if list_s[index] != " ":
                index += 1
            else:
                right = index - 1
                while left < right:
                    list_s[left], list_s[right] = list_s[right], list_s[left]
                    left += 1
                    right -= 1
                left = index + 1
                index += 1
        res = "".join(list_s)
        res = res[:-1]
        return res



if __name__ == '__main__':
    s = "  hello  world  "
    s = "the sky is blue"
    s = "a good   example"
    tmp = Solution()
    res = tmp.reverseWords(s)
    print(res)
    # 这里是只看了那三个步骤，没有看具体代码写出来的，执行用时非常高，感觉是最后第三步的时候处理的不是很便利，容我来看看答案
